﻿using System;
using System.Collections.Generic;
using System.Collections;
using System.Linq;
using System.Text;
using CajaChica.Entidades;
namespace CajaChica.Clases
{
    class clsOrdenCabecera : SystemException
    {
        cajaEntities objCajaEntidades;
        public clsOrdenCabecera()
        { 
        
        }

        public void Guardar(DateTime fecha, int proveedor, int serie, int numero, string condicion,
            string moneda, decimal tipoCambio, string documento, int centroCosto1, int centroCosto2,
            int centroCosto3, decimal subTotal, decimal igv, decimal total, DateTime fechaPago, int usuario)
        {
            
            objCajaEntidades = new cajaEntities();
            orden_cabecera cabecera = new orden_cabecera(); 
            cabecera.fecha = fecha;
            cabecera.id_persona = proveedor;
            cabecera.serie = serie;
            cabecera.numero = numero;
            cabecera.id_condicion = condicion;
            cabecera.moneda = moneda;
            cabecera.tipo_cambio = tipoCambio;
            cabecera.id_documento = documento;
            cabecera.id_centro_costo_1 = centroCosto1;
            cabecera.id_centro_costo_2 = centroCosto2;
            cabecera.id_centro_costo_3 = centroCosto3;
            cabecera.subtotal = subTotal;
            cabecera.igv = igv;
            cabecera.total = total;
            cabecera.fecha_pago = fechaPago;
            cabecera.id_usuario = usuario;
            cabecera.fecha_registro = DateTime.Now;
            
            objCajaEntidades.AddToorden_cabecera(cabecera);
            objCajaEntidades.SaveChanges();
        }

        public ArrayList CargarDatosDataGridView()
        {
            ArrayList lista = new ArrayList();
            objCajaEntidades = new cajaEntities();

            var query = from oc in objCajaEntidades.orden_cabecera
                        join c in objCajaEntidades.condicion on oc.id_condicion equals c.id
                        join cc in objCajaEntidades.centro_costo on oc.id_centro_costo_1 equals cc.id
                        join p in objCajaEntidades.personas on oc.id_persona equals p.id
                        where oc.id_persona != null
                        orderby oc.fecha
                        select new 
                        { 
                            CODIGO =oc.id,
                            FECHA_OPERACION = oc.fecha,
                            FECHA_PAGO = oc.fecha_pago,
                            A_ORDEN = p.rs,
                            SERIE = oc.serie,
                            NUMERO = oc.numero,
                            CONDICION = c.nombre,
                            MONEDA = oc.moneda,
                            TIPO_CAMBIO = oc.tipo_cambio,
                            DOCUMENTO = oc.id_documento,
                            CENTRO_COSTO = cc.descripcion,
                            TOTAL = oc.total,
                        };

            foreach(var datos in query)
            {
                lista.Add(datos);
            }

            return lista;
        }

        public ArrayList BuscarDataGridView(string buscar, string criterio)
        {
            ArrayList lista = new ArrayList();
            objCajaEntidades = new cajaEntities();
            
            if(criterio.Equals("1"))
            {
                var query = from oc in objCajaEntidades.orden_cabecera
                            join c in objCajaEntidades.condicion on oc.id_condicion equals c.id
                            join cc in objCajaEntidades.centro_costo on oc.id_centro_costo_1 equals cc.id
                            join p in objCajaEntidades.personas on oc.id_persona equals p.id
                            where oc.id_persona != null && p.rs.Contains(buscar)
                            select new
                            {
                                CODIGO = oc.id,
                                FECHA_OPERACION = oc.fecha,
                                FECHA_PAGO = oc.fecha_pago,
                                A_ORDEN = p.rs,
                                SERIE = oc.serie,
                                NUMERO = oc.numero,
                                CONDICION = c.nombre,
                                MONEDA = oc.moneda,
                                TIPO_CAMBIO = oc.tipo_cambio,
                                DOCUMENTO = oc.id_documento,
                                CENTRO_COSTO = cc.descripcion,
                                TOTAL = oc.total,
                            };
                foreach (var datos in query)
                {
                    lista.Add(datos);
                }
            }
            if (criterio.Equals("2"))
            {
                var query = from oc in objCajaEntidades.orden_cabecera
                            join c in objCajaEntidades.condicion on oc.id_condicion equals c.id
                            join cc in objCajaEntidades.centro_costo on oc.id_centro_costo_1 equals cc.id
                            join p in objCajaEntidades.personas on oc.id_persona equals p.id
                            where oc.id_persona != null && cc.descripcion.Contains(buscar)
                            select new
                            {
                                CODIGO = oc.id,
                                FECHA_OPERACION = oc.fecha,
                                FECHA_PAGO = oc.fecha_pago,
                                A_ORDEN = p.rs,
                                SERIE = oc.serie,
                                NUMERO = oc.numero,
                                CONDICION = c.nombre,
                                MONEDA = oc.moneda,
                                TIPO_CAMBIO = oc.tipo_cambio,
                                DOCUMENTO = oc.id_documento,
                                CENTRO_COSTO = cc.descripcion,
                                TOTAL = oc.total,
                            };
                foreach (var datos in query)
                {
                    lista.Add(datos);
                }
            }
            
            return lista;
        }
    }
}
